
#include <string.h>
#include "BSP_IO.h"
#include <ICC/Connector.h>
#include <ICC/Slot.h>

extern slot_t Slot[1];


int SIM_Init(void){
	Connector_Init();
	CharacterModule_Init();
	Slot_Init();
	return 0;
}

int SIM_Exchange(uint8_t* capdu, uint16_t clen, uint8_t* rapdu, uint16_t* rlen){
	uint32_t r_apdu_len;
	int ret = Slot_ExchangAPDU(Slot, capdu, clen, rapdu, &r_apdu_len);
	if(ret){
		Slot_PowerOff(Slot);
		return ret;
	}
	*rlen = r_apdu_len;
	return ret;
}

int SIM_PowerOn(uint8_t *atr, uint8_t* alen){
	int ret;
	CharacterModule_Init();
	Slot_Init();
	ret = Slot_PowerOn(Slot, atr, alen);
	if(ret){
		Slot_PowerOff(Slot);
	}
	return ret;
}

void SIM_PowerOff(void){
	Slot_PowerOff(Slot);
}

int SIM_IsActive(void){
	if(!Slot->icc){
		return 0;
	}
	
	return Slot->icc->active_flag;
}

void SIM_SetBWT(uint32_t bwt){
	Slot_SetBWT(Slot, bwt);
}

void SIM_SetWaitTime(uint32_t bwt, uint32_t cwt){
	Slot_SetWaitTime(Slot, bwt, cwt);
}

